#ifndef BUTTON_H
#define BUTTON_H
#include <basic.h>
#include <gpio.h>

#define BUTTON_ONLY_USE_BUTTON_SIMPLE_CLICK 0

#if !BUTTON_ONLY_USE_BUTTON_SIMPLE_CLICK
#define THE_MAX_BUTTON_COUNT 6 // 最大按钮数量
#endif

typedef enum
{
    BUTTON_EVENT_NONE,         // 无事件
    BUTTON_EVENT_CLICK,        // 单击事件
    BUTTON_EVENT_DOUBLE_CLICK, // 单击事件
    BUTTON_EVENT_LONGPRESS     // 长按事件
} button_event_t;

typedef struct
{
    callback_t cb;

    GPIO_Port port;
    GPIO_Pin pin;
#if !BUTTON_ONLY_USE_BUTTON_SIMPLE_CLICK
    enum
    {
        BUTTON_STATE_IDLE,     // 空闲状态
        BUTTON_STATE_PRESSED,  // 按下状态
        BUTTON_STATE_RELEASED, // 释放状态

    } state;
    uint8_t low_count; // 低电平计数
#endif
} button_handle_t;

button_handle_t *buttonInit(button_handle_t *handle, GPIO_Port port, GPIO_Pin pin, callback_func_t callback, void *user_arg);

int8_t buttonDetect(button_handle_t *handle);


#endif